{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "ef1f735f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# -*-coding:utf-8-*-\n",
    "import json\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import redis\n",
    "import time\n",
    "import requests\n",
    "import sys\n",
    "from datetime import datetime\n",
    "from websocket import create_connection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "e7082454",
   "metadata": {},
   "outputs": [],
   "source": [
    "pool = redis.ConnectionPool(host='localhost',\n",
    "                            port=6379,\n",
    "                            decode_responses=True,\n",
    "                            db=0)\n",
    "r = redis.Redis(connection_pool=pool)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "bbdde16c",
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(100):\n",
    "    r.lpush('ttt',i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "903a243c",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['99',\n",
       " '98',\n",
       " '97',\n",
       " '96',\n",
       " '95',\n",
       " '94',\n",
       " '93',\n",
       " '92',\n",
       " '91',\n",
       " '90',\n",
       " '89',\n",
       " '88',\n",
       " '87',\n",
       " '86',\n",
       " '85',\n",
       " '84',\n",
       " '83',\n",
       " '82',\n",
       " '81',\n",
       " '80',\n",
       " '79',\n",
       " '78',\n",
       " '77',\n",
       " '76',\n",
       " '75',\n",
       " '74',\n",
       " '73',\n",
       " '72',\n",
       " '71',\n",
       " '70',\n",
       " '69',\n",
       " '68',\n",
       " '67',\n",
       " '66',\n",
       " '65',\n",
       " '64',\n",
       " '63',\n",
       " '62',\n",
       " '61',\n",
       " '60',\n",
       " '59',\n",
       " '58',\n",
       " '57',\n",
       " '56',\n",
       " '55',\n",
       " '54',\n",
       " '53',\n",
       " '52',\n",
       " '51',\n",
       " '50',\n",
       " '49',\n",
       " '48',\n",
       " '47',\n",
       " '46',\n",
       " '45',\n",
       " '44',\n",
       " '43',\n",
       " '42',\n",
       " '41',\n",
       " '40',\n",
       " '39',\n",
       " '38',\n",
       " '37',\n",
       " '36',\n",
       " '35',\n",
       " '34',\n",
       " '33',\n",
       " '32',\n",
       " '31',\n",
       " '30',\n",
       " '29',\n",
       " '28',\n",
       " '27',\n",
       " '26',\n",
       " '25',\n",
       " '24',\n",
       " '23',\n",
       " '22',\n",
       " '21',\n",
       " '20',\n",
       " '19',\n",
       " '18',\n",
       " '17',\n",
       " '16',\n",
       " '15',\n",
       " '14',\n",
       " '13',\n",
       " '12',\n",
       " '11',\n",
       " '10',\n",
       " '9',\n",
       " '8',\n",
       " '7',\n",
       " '6',\n",
       " '5',\n",
       " '4',\n",
       " '3',\n",
       " '2',\n",
       " '1',\n",
       " '0']"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r.lrange('tt',0,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5410b3fb",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b91f9bb7",
   "metadata": {},
   "outputs": [],
   "source": [
    "ts = 1653974142124"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "c8ac9fb6",
   "metadata": {},
   "outputs": [],
   "source": [
    "E = 1653974142125\n",
    "ts = E/1000\n",
    "t = datetime.fromtimestamp(ts)\n",
    "str_t = datetime.strftime(t,'%Y-%m-%d %H:%M:%S.%f')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "8849f77c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2022-05-31 13:15:42.125000'"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "str_t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "0037af8a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2022-05-31 13:15:42.3125000'"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "str_t = datetime.strftime(t,'%Y-%m-%d %H:%M:%S.3%f')\n",
    "str_t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "cc996f3a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2022-05-31 13'"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "str_t[:13]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6362467f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "6462010a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "open(f'{symbol}_{str_t[:13]}_depth.txt','a').write('ddddd2\\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "d407458a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1919.978515625"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "1966058/1024"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "e0e9226d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'aa', 'cccc'}"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = ['aa','bbb','cccc']\n",
    "b = ['zzz','kkk','bbb']\n",
    "set(a) -set(b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b8934d27",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "141f325d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8657e3aa",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "ename": "ConnectionResetError",
     "evalue": "[WinError 10054] 远程主机强迫关闭了一个现有的连接。",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mConnectionResetError\u001b[0m                      Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-3-0e2fd1dec63e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[0msymbol\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'BTCUSDT'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[0mfreq\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'1000ms'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mws\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcreate_connection\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mf\"wss://stream.binance.com:9443/ws/{symbol.lower()}@depth@{freq}\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32mD:\\anaconda\\lib\\site-packages\\websocket\\_core.py\u001b[0m in \u001b[0;36mcreate_connection\u001b[1;34m(url, timeout, class_, **options)\u001b[0m\n\u001b[0;32m    594\u001b[0m                      skip_utf8_validation=skip_utf8_validation, **options)\n\u001b[0;32m    595\u001b[0m     \u001b[0mwebsock\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msettimeout\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtimeout\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32melse\u001b[0m \u001b[0mgetdefaulttimeout\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 596\u001b[1;33m     \u001b[0mwebsock\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0murl\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    597\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mwebsock\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda\\lib\\site-packages\\websocket\\_core.py\u001b[0m in \u001b[0;36mconnect\u001b[1;34m(self, url, **options)\u001b[0m\n\u001b[0;32m    247\u001b[0m         \"\"\"\n\u001b[0;32m    248\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msock_opt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtimeout\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0moptions\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'timeout'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msock_opt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 249\u001b[1;33m         self.sock, addrs = connect(url, self.sock_opt, proxy_info(**options),\n\u001b[0m\u001b[0;32m    250\u001b[0m                                    options.pop('socket', None))\n\u001b[0;32m    251\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda\\lib\\site-packages\\websocket\\_http.py\u001b[0m in \u001b[0;36mconnect\u001b[1;34m(url, options, proxy, socket)\u001b[0m\n\u001b[0;32m    134\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mis_secure\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    135\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mHAVE_SSL\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 136\u001b[1;33m                 \u001b[0msock\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_ssl_socket\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msock\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0moptions\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msslopt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhostname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    137\u001b[0m             \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    138\u001b[0m                 \u001b[1;32mraise\u001b[0m \u001b[0mWebSocketException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"SSL not available.\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda\\lib\\site-packages\\websocket\\_http.py\u001b[0m in \u001b[0;36m_ssl_socket\u001b[1;34m(sock, user_sslopt, hostname)\u001b[0m\n\u001b[0;32m    265\u001b[0m     check_hostname = sslopt[\"cert_reqs\"] != ssl.CERT_NONE and sslopt.pop(\n\u001b[0;32m    266\u001b[0m         'check_hostname', True)\n\u001b[1;32m--> 267\u001b[1;33m     \u001b[0msock\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_wrap_sni_socket\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msock\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msslopt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhostname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcheck_hostname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    268\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    269\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mHAVE_CONTEXT_CHECK_HOSTNAME\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mcheck_hostname\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda\\lib\\site-packages\\websocket\\_http.py\u001b[0m in \u001b[0;36m_wrap_sni_socket\u001b[1;34m(sock, sslopt, hostname, check_hostname)\u001b[0m\n\u001b[0;32m    240\u001b[0m         \u001b[0mcontext\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_ecdh_curve\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msslopt\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'ecdh_curve'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    241\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 242\u001b[1;33m     return context.wrap_socket(\n\u001b[0m\u001b[0;32m    243\u001b[0m         \u001b[0msock\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    244\u001b[0m         \u001b[0mdo_handshake_on_connect\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msslopt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'do_handshake_on_connect'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda\\lib\\ssl.py\u001b[0m in \u001b[0;36mwrap_socket\u001b[1;34m(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, session)\u001b[0m\n\u001b[0;32m    498\u001b[0m         \u001b[1;31m# SSLSocket class handles server_hostname encoding before it calls\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    499\u001b[0m         \u001b[1;31m# ctx._wrap_socket()\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 500\u001b[1;33m         return self.sslsocket_class._create(\n\u001b[0m\u001b[0;32m    501\u001b[0m             \u001b[0msock\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msock\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    502\u001b[0m             \u001b[0mserver_side\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mserver_side\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda\\lib\\ssl.py\u001b[0m in \u001b[0;36m_create\u001b[1;34m(cls, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, context, session)\u001b[0m\n\u001b[0;32m   1038\u001b[0m                         \u001b[1;31m# non-blocking\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1039\u001b[0m                         \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"do_handshake_on_connect should not be specified for non-blocking sockets\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1040\u001b[1;33m                     \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdo_handshake\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1041\u001b[0m             \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mOSError\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1042\u001b[0m                 \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclose\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda\\lib\\ssl.py\u001b[0m in \u001b[0;36mdo_handshake\u001b[1;34m(self, block)\u001b[0m\n\u001b[0;32m   1307\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m0.0\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mblock\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1308\u001b[0m                 \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msettimeout\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1309\u001b[1;33m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_sslobj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdo_handshake\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1310\u001b[0m         \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1311\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msettimeout\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mConnectionResetError\u001b[0m: [WinError 10054] 远程主机强迫关闭了一个现有的连接。"
     ]
    }
   ],
   "source": [
    "symbol = 'BTCUSDT'\n",
    "freq = '1000ms'\n",
    "ws = create_connection(f\"wss://stream.binance.com:9443/ws/{symbol.lower()}@depth@{freq}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "de4261db",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
